package com.zcy.ghost.vivideo.utils; import android.support.annotation.NonNull; import android.text.TextUtils; import com.orhanobut.logger.Logger; import com.zcy.ghost.vivideo.BuildConfig; import org.slf4j.LoggerFactory; import java.util.WeakHashMap; /** * Log日志输出, 子类是 KL * <p/> * <p/> * 1.多彩格式的日志,提供关键信息; * <p/> * 2.和slf4j 相同格式,统一管理; * <p/> * 3.抽离简化日志功能。 * <p/> * Created by Caopeng on */ public class L { private static final String TAG = "TAG"; private static WeakHashMap<String, org.slf4j.Logger> loggerHashMap; /** * 获取 创建Logger 的时候的实例,提供利用率 * * @param className logger的名称 * @return */ private static org.slf4j.Logger getLoggerInstance(String className) { if (loggerHashMap == null) loggerHashMap = new WeakHashMap<String, org.slf4j.Logger>(); if (loggerHashMap.containsKey(className)) { return loggerHashMap.get(className); } else { org.slf4j.Logger logger = LoggerFactory.getLogger(className); loggerHashMap.put(className, logger); return logger; } } /** * @param classObj * @param messageForI 统一使用 {} 占位符 * @param args */ public static void i(Class classObj, String messageForI, Object... args) { String className = verifyClass(classObj); i(className, messageForI, args); } private static void i(String className, String messageForI, Object... args) { if (!BuildConfig.DEBUG) { org.slf4j.Logger logger = getLoggerInstance(className); if (logger == null) { return; } logger.info(messageForI, args); } else { Logger.i(handleDebugLogFormat(messageForI), args); } } /** * @param classObj * @param messageForD 统一使用 {} 占位符 * @param args */ public static void d(Class classObj, String messageForD, Object... args) { String className = verifyClass(classObj); d(className, messageForD, args); } private static void d(String className, String messageForD, Object... args) { if (!BuildConfig.DEBUG) { org.slf4j.Logger logger = getLoggerInstance(className); if (logger == null) { return; } logger.debug(messageForD, args); } else { Logger.d(handleDebugLogFormat(messageForD), args); } } /** * @param classObj * @param messageForW 统一使用 {} 占位符 * @param args */ public static void w(Class classObj, String messageForW, Object... args) { String className = verifyClass(classObj); w(className, messageForW, args); } private static void w(String className, String messageForW, Object... args) { if (!BuildConfig.DEBUG) { org.slf4j.Logger logger = getLoggerInstance(className); if (logger == null) { return; } logger.warn(messageForW, args); } else { Logger.w(handleDebugLogFormat(messageForW), args); } } /** * @param classObj * @param messageForE 统一使用 {} 占位符 * @param args */ public static void e(Class classObj, String messageForE, Object... args) { String className = verifyClass(classObj); e(className, messageForE, args); } private static void e(String className, String messageForE, Object... args) { if (!BuildConfig.DEBUG) { org.slf4j.Logger logger = getLoggerInstance(className); if (logger == null) { return; } logger.error(messageForE, args); } else { Logger.e(handleDebugLogFormat(messageForE), args); } } @NonNull private static String verifyClass(Class classObj) { String className = TAG; if (classObj != null) { className = classObj.getSimpleName(); } return className; } /** * 处理Debug模式下的打印log格式 * * @param message * @return */ private static String handleDebugLogFormat(String message) { return message.replace("{}", "%s"); } /** * debug 模式下,会打印json 数据 * * @param messageForE */ public static void json(String messageForE) { if (BuildConfig.DEBUG) { Logger.json(messageForE); } } /** * 不需要可以移除 */ public static void removeLogger(Class classObj) { removeLogger(classObj.getSimpleName()); } /** * 删除所有Logger持有的对象 */ public static void removeAllLogger() { if (loggerHashMap != null) { loggerHashMap.clear(); } } private static void removeLogger(String className) { if (loggerHashMap != null && !TextUtils.isEmpty(className)) { loggerHashMap.remove(className); } } }